package manager

import (
	"BlazeRider-backend/config"
	"database/sql"
	"fmt"
	"sync"
	"time"
)

// DYToKenManager 管理礼物赠送记录
type DYToKenManager struct {
	roomGiftRecords map[string]map[string][]GiftRecord
	storage         DYTokenMysqlStorage
	mu              sync.Mutex
}

// GiftRecord 表示单个礼物的赠送记录
type DyTokenIno struct {
	DyTokenId string       `json:"dy_token_id"`
	Token     string       `json:"token"`
	ExpireAt  time.Time    `json:"expire_at"`
	CreateAt  sql.NullTime `json:"create_at"` // 使用 NullTime
	UpdateAt  sql.NullTime `json:"update_at"` // 使用 NullTime
}

func NewDYToKenManager() *DYToKenManager {
	var storage *DYTokenMysqlStorage
	var err error
	if config.Get().Database.Enabled {
		storage, err = NewDYTokenMysqlStorage()
		if err != nil {
			return nil
		}

		return &DYToKenManager{
			storage: *storage,
		}
	}
	return &DYToKenManager{
		roomGiftRecords: make(map[string]map[string][]GiftRecord),
	}
}

// AddGiftRecord 增加礼物赠送记录
func (dytm *DYToKenManager) AddToken(token string) error {
	if config.Get().Database.Enabled {
		err := dytm.storage.AddToken(token)
		if err != nil {
			return err
		}
		return nil
	}
	return fmt.Errorf("AddToken no mem logic")
}

// 查询本局最后一次该礼物信息
func (dytm *DYToKenManager) GetLastCanUseToken() (*DyTokenIno, error) {
	if config.Get().Database.Enabled {
		dyTokenMysqlInfo, err := dytm.storage.GetLastCanUseToken()
		if err != nil {
			return nil, err
		}

		return &DyTokenIno{
			DyTokenId: dyTokenMysqlInfo.DyTokenId,
			Token:     dyTokenMysqlInfo.Token,
			ExpireAt:  dyTokenMysqlInfo.ExpireAt,
			CreateAt:  dyTokenMysqlInfo.CreateAt,
			UpdateAt:  dyTokenMysqlInfo.UpdateAt,
		}, nil // 返回 LiveRoomStatus 和 false
	}
	return nil, fmt.Errorf("GetLastCanUseToken no mem logic")
}

// 查询本局最后一次该礼物信息
func (dytm *DYToKenManager) ExpireCanUseToken() error {
	if config.Get().Database.Enabled {
		err := dytm.storage.ExpireCanUseToken()
		if err != nil {
			return err
		}

		return nil // 返回  执行正确
	}
	return fmt.Errorf("ExpireCanUseToken no mem logic")
}
